package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 什么是Session
 * Sission也是服务器端的一种会话技术,服务器在运行的时候可以为每一个用户的数据去创建一个单独Session对象
 * Session可以为用户浏览器所独享的. 所以当在访问web资源的时候,可以把各自的数据保存在各自的Session中
 *
 * Session的核心类:HttpSession 在服务器端保存会话的数据
 * 可以通过req.getSession() 来获取到HttpSession接口
 *
 * getid():获取一个session的编号
 * invalidate()通过此方法可以销毁session对象()
 * setAttribute("Key""value")       向session中保存数据
 * getAttribute(key)       根据name获取到value
 * removeAttribute  清楚数据可以在退出登录的时候调用此方法
 *
 * Session执行原理(重要)
 *1.第一次会创建Session对象, 会给Session对象分配一个唯一的ID (JSESSION ID)\
 * 2.将JSESSIONID作为Cookie的值发送给浏览器来保存的
 * 3.第二次访问服务端的时候,浏览器会携带JSESSIONID的cookie来访问服务器
 * 4.服务器要得到JSESSIONID,在服务器端的内存中搜索是否存在对应的Session对象
 *
 * 注意:保存在Session中的数据会被多个Servlet,Jsp共享,只要浏览器不关闭,那么保存在Session中的数据会一直有效(重要)
 */
public class SessionDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out= resp.getWriter();
        //调用Session方法
        HttpSession session = req.getSession();
        //向session中保存数据
        session.setAttribute("name","123w");
        //从session中获取数据
        String name = (String)session.getAttribute("name");
        out.println("JSESSIONID"+session.getId()+"-----------"+name);

//        //手动向客户端写Cookie
//        Cookie cookie = new Cookie("Jession",session.getId());
//        cookie.setMaxAge(1*30*24*60*60);
//        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}






























